home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 2
/
Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso
/
Aminet
/
util
/
libs
/
MultiReq.lha
/
MultiReq
/
ASM
/
SimpleDemo.asm
< prev
next >
Wrap
Assembly Source File
|
1992-11-12
|
8KB
|
377 lines
; my includes
include "exec/types.i"
include "exec/execbase.i"
include "libraries/dosextens.i"
include "libraries/multireq.i"
include "libraries/multireq_lib.i"
; some Functions not defined yet
_ExecBase = 4
_LVOOpenLibrary = -552
_LVOCloseLibrary = -414
_LVOWait = -318
_LVOGetMsg = -372
_LVOReplyMsg = -378
_LVOOutput = -60
_LVOOpen = -30
_LVOClose = -36
_LVODelay = -198
_LVOWrite = -48
; the startup-code for WBStart
_startup:
move.l _ExecBase,a6
move.l ThisTask(a6),a4 ;pointer to this task (better than FindTask !)
move.l pr_CLI(a4),d0 ;has this task a CLI
bne.s start_main ;program started from CLI
; Started from WorkBench
lea pr_MsgPort(a4),a0
moveq #1,d0
moveq #0,d1
move.b MP_SIGBIT(a0),d1
asl.l d1,d0
jsr _LVOWait(a6) ;Wait for a msg from WorkBench
lea pr_MsgPort(a4),a0
jsr _LVOGetMsg(a6) ;Get msg from WorkBench
lea _WBMsg(pc),a0
move.l d0,(a0)
start_main:
bsr.s _main
move.l _WBMsg(pc),d0 ;is there a WorkBench msg ?
beq.s go_home
move.l d0,a1
move.l _ExecBase,a6
jsr _LVOReplyMsg(a6)
go_home:
moveq #0,d0
rts
_WBMsg: dc.l 0 ; Set if started from WorkBench
; the main program
_main:
move.l _ExecBase,a6
lea DOSName(pc),a1
moveq #0,d0
jsr _LVOOpenLibrary(a6) ;Open dos.library
lea _DOSBase(pc),a0
move.l d0,(a0) ;get DOSBase
beq _exit
move.l _WBMsg(pc),d0 ; started from WBench ?
bne.s out_win ; I was started from WBench
move.l _DOSBase(pc),a6 ;DOSBase
jsr _LVOOutput(a6) ;get output handle
bra.s set_output
out_win:
move.l _DOSBase(pc),a6 ;DOSBase
lea OutWin(pc),a0
move.l a0,d1
move.l #MODE_NEWFILE,d2
jsr _LVOOpen(a6)
set_output:
lea _output(pc),a0
move.l d0,(a0) ;save output handle
move.l _ExecBase,a6
lea MultiName(pc),a1
moveq #0,d0
jsr _LVOOpenLibrary(a6) ;Open multireq.library
lea _MultiReqBase(pc),a0
move.l d0,(a0) ;get MultiReqBase
bne.s multi_ok
move.l _DOSBase(pc),a6
lea NoMultiReq(pc),a0
move.l a0,d2 ;buffer
move.l _output(pc),d1 ;handle
moveq #30,d3 ;length
jsr _LVOWrite(a6)
bra.s no_multi
multi_ok:
; Create a FileReq-structure
move.l _MultiReqBase(pc),a6
lea _fr(pc),a0 ;address of pointer to FileReq
moveq #2,d0 ;this version only supports 2 filelists
jsr _LVOInitFileReq(a6)
move.l _fr(pc),d0 ;tst.l
bne.s fr_ok
move.l _DOSBase(pc),a6
lea NoFileReq(pc),a0
move.l a0,d2 ;buffer
move.l _output(pc),d1 ;handle
moveq #37,d3 ;length
jsr _LVOWrite(a6)
bra.s no_fr
fr_ok: ;FileReq-structure ok
; Set some sample parameters
bsr _SetParameters
req_loop:
; start FileRequester on WorkBench-screen
move.l _MultiReqBase(pc),a6
move.l _fr(pc),a0 ;FileReq-structure
sub.l a1,a1 ;use WorkBench-Screen
jsr _LVOFileRequester(a6)
move.w d0,d7 ;ReturnStatus
;Say how the FileRequester was ended
bsr _WriteAction
cmp.w #RET_OKAY,d7 ; should I start again ?
beq.s req_loop
; Delete the FileReq-structure and free the memory */
move.l _MultiReqBase(pc),a6
lea _fr(pc),a0 ;address of pointer to FileReq
jsr _LVOFreeFileReq(a6)
no_fr: ; Close the multireq.library
move.l _ExecBase,a6
move.l _MultiReqBase(pc),a1
jsr _LVOCloseLibrary(a6)
no_multi: ; Close the dos.library
move.l _WBMsg(pc),d0 ; started from WorkBench ?
beq.s cl_multi ; I was started from CLI
move.l _DOSBase(pc),a6
moveq #100,d1
jsr _LVODelay(a6) ;wait 2 seconds
move.l _output(pc),d1
jsr _LVOClose(a6)
cl_multi:
move.l _ExecBase,a6
move.l _DOSBase(pc),a1
jsr _LVOCloseLibrary(a6)
_exit:
rts ; everything done, bye !
; some important data
_MultiReqBase: dc.l 0 ; a pointer to the multireq.library base
_DOSBase: dc.l 0 ; a pointer to the dos.library base
_fr: dc.l 0 ; memory for the pointer to the FileReq-structure
_output: dc.l 0 ; output handle
; the name of the needed libraries
DOSName: dc.b 'dos.library',0
MultiName: dc.b 'multireq.library',0
NoMultiReq: dc.b "Can't open multireq.library !",10
NoFileReq: dc.b "Unable to create FileReq-structure !",10
OutWin: dc.b "CON:0/14/400/100/SimpleDemo output window",0
; This routine is a example how to interpret the ReturnStatus of the
; FileRequester (notice the value ReturnStatus is identical to that returned
; by the FileRequester-function
; some texts
Error: dc.b "Unable to open FileRequester !",10
Cancel: dc.b "You've clicked on the Cancel-gadget",10
Close: dc.b "You've clicked on the Close-gadget",10
File: dc.b "You've pressed <RETURN> in the File-gadget",10
Double: dc.b "You've done a DoubleClick on a File",10
Okay: dc.b "You've pressed on the Okay-gadget",10
dc.b " => the FileRequester is started again",10
Sel: dc.b 10,"The follwing file was selected:"
CR: dc.b 10,10
EVEN
_WriteAction:
move.l _fr(pc),a0
move.w fr_ReturnStatus(a0),d0
cmp.w #RET_ERROR,d0 ; start successfull ?
bne.s cancel_case
lea Error(pc),a0 ;text
moveq #31,d3 ;length
bra.s wr_act
cancel_case:
cmp.w #RET_CANCEL,d0 ; Cancel-gadget pressed
bne.s close_case
lea Cancel(pc),a0 ;text
moveq #36,d3 ;length
bra.s wr_act
close_case:
cmp.w #RET_CLOSE,d0 ; Close-gadget pressed
bne.s file_case
lea Close(pc),a0 ;text
moveq #35,d3 ;length
bra.s wr_act
file_case:
cmp.w #RET_FILE,d0 ; RETURN pressed
bne.s double_case
lea File(pc),a0 ;text
moveq #43,d3 ;length
bra.s wr_act
double_case:
cmp.w #RET_DOUBLE,d0 ; DoubleClick on File
bne.s okay_case
lea Double(pc),a0 ;text
moveq #36,d3 ;length
bra.s wr_act
okay_case:
cmp.w #RET_OKAY,d0 ; Okay-gadget pressed
bne.s wa_ret ; what status is this ?????
lea Okay(pc),a0 ;text
moveq #74,d3 ;length
wr_act: ; Write done action
move.l _DOSBase(pc),a6
move.l _output(pc),d1 ;file handle
move.l a0,d2 ;buffer
jsr _LVOWrite(a6) ;d3 already set
lea Sel(pc),a0
move.l a0,d2 ;buffer
move.l _output(pc),d1 ;file handle
moveq #33,d3 ;length
jsr _LVOWrite(a6)
move.l _MultiReqBase(pc),a6
move.l _fr(pc),a0
move.l fr_FileNameBuff(a0),a0
jsr _LVOStrLen(a6)
move.l _DOSBase(pc),a6
move.l d0,d3 ;length
move.l _output(pc),d1 ;file handle
move.l _fr(pc),a0
move.l fr_FileNameBuff(a0),d2 ;buffer
jsr _LVOWrite(a6)
lea CR(pc),a0
move.l a0,d2 ;buffer
move.l _output(pc),d1 ;file handle
moveq #2,d3 ;length
jsr _LVOWrite(a6)
wa_ret:
rts
; the following part contains some parameters for the FileRequester
; all this parameters are optional, cause FileRequester also works, when no
; parameters are set (InitFileReq has done this for you)
; again some texts
Title: dc.b "The multitasking FileRequester by Andreas Krebs",0
OkayT: dc.b "go on",0
Dir1: dc.b "SYS:",0
Dir2: dc.b "DEVS:",0
FileT: dc.b "SampleFile",0
Show: dc.b "*.*|*-*",0 ; Show all files with a . or - in it
Hide: dc.b "*+*",0 ; Hide all files with a + in it
EVEN
_SetParameters:
move.l _fr(pc),a3
lea Title(pc),a0
move.l a0,fr_TitleString(a3) ;Set title of FileRequester
lea OkayT(pc),a0
move.l a0,fr_OkayString(a3) ;Set text of Okay-gadget
move.w #20,fr_LeftEdge(a3) ;Set LeftEdge of FileRequester
move.w #10,fr_TopEdge(a3) ;Set TopEdge of FileRequester
move.b #1,fr_ActiveList(a3) ;Show filelist 2 first
move.b #HIDE_INFO,fr_ShowInfo(a3) ;Don't show .info-files
move.l _MultiReqBase(pc),a6
lea FileT(pc),a0
move.l fr_FileBuff(a3),a1
jsr _LVOStrCpy(a6) ;File to be displayed in File-Gadget
lea Show(pc),a0
move.l fr_ShowBuff(a3),a1
jsr _LVOStrCpy(a6) ;Files to be shown
lea Hide(pc),a0
move.l fr_HideBuff(a3),a1
jsr _LVOStrCpy(a6) ;Files to be hidden
lea Dir1(pc),a0
move.l fr_FileList1+flt_DrawerBuff(a3),a1
jsr _LVOStrCpy(a6) ;Set name of first directory
move.w #NO_AUTOREAD,fr_FileList1+flt_AutoRead(a3)
; Do not automatically readin first directory
lea Dir2(pc),a0
move.l fr_FileList2+flt_DrawerBuff(a3),a1
jsr _LVOStrCpy(a6) ;Set name of second directory
move.w #DO_AUTOREAD,fr_FileList2+flt_AutoRead(a3)
; Do automatically readin second directory
rts
END